Estoy construyendo un sitio de Gatsby . Actualicé Node.js a v17.0.1 , y cuando ejecuto una compilación, hay un error:
Error: digital envelope routines::unsupported opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED'Si lo cambio a v16, funciona bien y la compilación será exitosa. ¿Cómo puedo arreglar esto?
Al buscar en Google, este puede ser un problema similar: Error: error: 06065064: rutinas de sobres digitales: EVP_DecryptFinal_ex: mal descifrado # 48
Esto podría ayudar. Agregue estos scripts en el archivo package.json .
"scripts": { "start": "export SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts start", "build": "export SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts build" }o
"scripts": { "start": "react-scripts --openssl-legacy-provider start", "build": "react-scripts --openssl-legacy-provider build", } "scripts": { "serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build", "lint": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service lint" },o
"scripts": { "serve": "vue-cli-service --openssl-legacy-provider serve", "build": "vue-cli-service --openssl-legacy-provider build", "lint": "vue-cli-service --openssl-legacy-provider lint" },Gatsby debe estar usando un algoritmo o tamaño de clave que ya no está permitido de forma predeterminada con OpenSSL 3.0.
ACTUALIZACIÓN ⚠️
Lo más probable es que se trate de un problema del paquete web: https://github.com/webpack/webpack/issues/14532
Desde entonces, lanzaron una solución en la versión 5.61.0 : https://github.com/webpack/webpack/releases/tag/v5.61.0 , por lo que la actualización del paquete web también debería solucionar el problema.
Un miembro del equipo del paquete web ha declarado que no planean realizar una copia de la solución al paquete web 4, por lo que si está en el paquete web 4, es posible que primero deba buscar actualizar al paquete web 5.
De la publicación del anuncio de Node.js 17 :
Si encuentra un error
ERR_OSSL_EVP_UNSUPPORTEDen su aplicación con Node.js 17, es probable que su aplicación o un módulo que esté usando esté intentando usar un algoritmo o tamaño de clave que ya no está permitido de forma predeterminada con OpenSSL 3.0. Se agregó una nueva opción de línea de comandos ,--openssl-legacy-provider, para volver al proveedor heredado como una solución temporal para estas restricciones estrictas.
Ejecutar esto en la terminal podría verse así:
node --openssl-legacy-provider ./node_modules/.bin/gatsby buildTambién puede pasar esto a través de la variable de entorno NODE_OPTIONS .
Entonces, si desea continuar usando el script de NPM, puede cambiar el script de build a:
// package.json { "scripts": { "build": "export NODE_OPTIONS=--openssl-legacy-provider; gatsby build" } }Solución rápida: ejecute esto en una terminal dentro de su proyecto React.
export NODE_OPTIONS=--openssl-legacy-provider